package com.zmn.plat.persistence.interfaces.part;

import com.zmn.common.dto.StatusDTO;
import com.zmn.common.dto.VtDTO;
import com.zmn.plat.model.dto.part.PartSkuDTO;
import com.zmn.plat.model.entity.part.PartSku;
import com.zmn.plat.model.entity.part.PartSkuQuery;
import com.zmn.plat.model.vo.part.PartSkuVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 类描述： PartSkuDAO
 *
 * @author DaiZhichao
 * @since 2018/10/20 10:37
 */
public interface PartSkuDAO {

    /**
     * 描述: 根据 id列表 查询多条数据
     *
     * @param ids Integer
     * @return PartSkuDTO
     * @author DaiZhichao
     * @since 2018/12/13 14:13
     */
    List<PartSkuDTO> findPartDTOByIds(List<Integer> ids);

    /**
     * 描述: 根据 id 查询单条数据
     *
     * @param skuId Integer
     * @return PartSkuDTO
     * @author DaiZhichao
     * @since 2018/12/13 14:13
     */
    PartSkuDTO findPartDTOById(Integer skuId);

    /**
     * 描述: 根据 id 查询单条数据
     *
     * @param skuId Integer
     * @return PartSku
     * @author DaiZhichao
     * @since 2018/12/13 14:13
     */
    PartSku findByKey(Integer skuId);

    /**
     * 描述: 根据 id 查询单条数据
     *
     * @param skuId Integer
     * @return PartSkuVO
     * @author DaiZhichao
     * @since 2018/12/13 14:13
     */
    PartSkuVO findVOByKey(Integer skuId);

    /**
     * 描述: 根据 query 查询多条数据并分页
     *
     * @param query PartCategoryMap
     * @return List<PartSkuVO>
     * @author DaiZhichao
     * @since 2018/12/13 14:13
     */
    List<PartSkuVO> listVOPageByQuery(PartSkuQuery query);

    /**
     * 描述: 根据 query 查询多条数据并分页
     *
     * @param query PartCategoryMap
     * @return List<PartSku>
     * @author DaiZhichao
     * @since 2018/12/13 14:13
     */
    List<PartSku> listPageByQuery(PartSkuQuery query);

    /**
     * 描述: 根据 query 查询多条数据
     *
     * @param query PartCategoryMap
     * @return List<PartSku>
     * @author DaiZhichao
     * @since 2018/12/13 14:13
     */
    List<PartSku> listByQuery(PartSkuQuery query);

    /**
     * 描述: 根据 text 模糊查询
     *
     * @param text String
     * @return List<VtDTO>
     * @author DaiZhichao
     * @since 2018/12/13 14:13
     */
    List<VtDTO> listByText(String text);

    /**
     * 描述: 根据 query 查询简单列表
     *
     * @param query PartSkuQuery
     * @return List<VtDTO>
     * @author DaiZhichao
     * @since 2018/12/13 14:13
     */
    List<VtDTO> listVtDTOByQuery(PartSkuQuery query);

    /**
     * 描述: 根据 query 查询总条数
     *
     * @param query PartCategoryMap
     * @return Integer
     * @author DaiZhichao
     * @since 2018/12/13 14:13
     */
    Integer countByQuery(PartSkuQuery query);

    /**
     * 描述: 查询最大值
     *
     * @return Integer
     * @author DaiZhichao
     * @since 2018/12/13 14:13
     */
    Integer countByMax();

    /**
     * 描述: 根据 ID 修改单条数据
     *
     * @param entity PartCategoryMap
     * @return Integer
     * @author DaiZhichao
     * @since 2018/12/13 14:13
     */
    Integer updateByKey(PartSku entity);

    /**
     * 描述: 根据 ID 修改单条数据的状态
     *
     * @param entity PartCategoryMap
     * @return Integer
     * @author DaiZhichao
     * @since 2018/12/13 14:13
     */
    Integer updateStatus(PartSku entity);

    /**
     * 描述: 根据 StatusDTO 修改单条数据的状态
     *
     * @param dto StatusDTO
     * @return Integer
     * @author DaiZhichao
     * @since 2018/12/13 14:13
     */
    Integer updateStatusBatch(StatusDTO dto);

    /**
     * 描述: 根据 StatusDTO 修改单条数据的排序值
     *
     * @param entity PartSku
     * @return Integer
     * @author DaiZhichao
     * @since 2018/12/13 14:13
     */
    Integer updateSort(PartSku entity);

    /**
     * 描述: 新增单条数据
     *
     * @param entity PartCategoryMap
     * @return Integer
     * @author DaiZhichao
     * @since 2018/12/13 14:13
     */
    Integer insert(PartSku entity);

    /**
     * 描述: 删除单条数据
     *
     * @param skuId Integer
     * @return Integer
     * @author DaiZhichao
     * @since 2018/12/13 14:13
     */
    Integer deleteByKey(Integer skuId);
}
